#ifndef __GAME_CONSTANS_H__
#define __GAME_CONSTANS_H__

#include "SimpleSingleton.hpp"


namespace PocketSurvival
{
    class ServerRoot;
    class PackageManager;
    class BanManager;
    class MessageManager;
    class ModsManager;
    class ConnectionManager;


    class ServerConfigure;
    class GameRandom;
    class GameThreadPool;
    class GameNoWaitThreadPool;
    class GameSaveThreadPool;
    class GameRegistry;


    class BlocksManager;
    class ChangeManager;
    class ComponentsManager;
    class CraftingRecipesManager;
    class EntityManager;
    class FurnaceRecipesManager ;
    class GameManager;
    class PlantsManager;
    class SkinsManager;


    class EventManager;
    class PluginsManager;



    namespace GameSingleton
    {
        extern SimpleSingleton* singletonPtr;

        /**
         * 下面的单例对象也是先注册进 singletonPtr 对象里面的，放在这里只是方便使用，
        */

        extern ServerRoot *serverRoot;
        extern PackageManager *packageManager;
        extern BanManager *banManager;
        extern MessageManager *messageManager;
        extern ModsManager *modsManager;
        extern ConnectionManager *connectionManager;


        extern ServerConfigure *serverConfigure;
        extern GameRandom *gameRandom;
        extern GameThreadPool *gameThreadPool;
        extern GameNoWaitThreadPool *gameNoWaitThreadPool;
        extern GameSaveThreadPool *gameSaveThreadPool;
        extern GameRegistry *gameRegistry;


        extern BlocksManager *blocksManager;
        extern ChangeManager *changeManager;
        extern ComponentsManager *componentsManager;
        extern CraftingRecipesManager *craftingRecipesManager;
        extern EntityManager *entityManager;
        extern FurnaceRecipesManager *furnaceRecipesManager;
        extern GameManager *gameManager;
        extern PlantsManager *plantsManager;
        extern SkinsManager *skinsManager;


        extern EventManager *eventManager;
        extern PluginsManager *pluginsManager;
    }
}



#endif
